//package com.java110.job.export.adapt;
//
//import com.alibaba.fastjson.JSONObject;
//import com.java110.dto.data.ExportDataDto;
//import com.java110.dto.scheduleClasses.ScheduleClassesDto;
//import com.java110.dto.scheduleClasses.ScheduleClassesDayDto;
//import com.java110.dto.scheduleClasses.ScheduleClassesStaffDto;
//import com.java110.dto.scheduleClasses.ScheduleClassesTimeDto;
//import com.java110.intf.store.IScheduleClassesDayV1InnerServiceSMO;
//import com.java110.intf.store.IScheduleClassesStaffV1InnerServiceSMO;
//import com.java110.intf.store.IScheduleClassesV1InnerServiceSMO;
//import com.java110.job.export.IExportDataAdapt;
//import com.java110.utils.util.DateUtil;
//import org.apache.poi.ss.usermodel.Row;
//import org.apache.poi.ss.usermodel.Sheet;
//import org.apache.poi.xssf.streaming.SXSSFWorkbook;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.ArrayList;
//import java.util.Calendar;
//import java.util.List;
//
///**
// * 排班表导出
// */
//@Service("reportStaffMonthScheduleClasses")
//public class ReportStaffMonthScheduleClassesAdapt implements IExportDataAdapt {
//
//    private static final int MAX_ROW = 200;
//
//    @Autowired
//    private IScheduleClassesStaffV1InnerServiceSMO scheduleClassesStaffV1InnerServiceSMOImpl;
//
//    @Autowired
//    private IScheduleClassesV1InnerServiceSMO scheduleClassesV1InnerServiceSMOImpl;
//
//    @Autowired
//    private IScheduleClassesDayV1InnerServiceSMO scheduleClassesDayV1InnerServiceSMOImpl;
//
//
//    @Override
//    public SXSSFWorkbook exportData(ExportDataDto exportDataDto) {
//
//        SXSSFWorkbook workbook = null;  //工作簿
//        String userId = "";
//        //工作表
//        workbook = new SXSSFWorkbook();
//        workbook.setCompressTempFiles(false);
//
//        Sheet sheet = workbook.createSheet("排班表");
//        Row row = sheet.createRow(0);
//        row.createCell(0).setCellValue("员工名称");
//
//        JSONObject reqJson = exportDataDto.getReqJson();
//
//        String curMonth = reqJson.getString("curDate");
//        String curMonthDay = curMonth + "-01";
//
//        Calendar calendar = Calendar.getInstance();
//        calendar.setTime(DateUtil.getDateFromStringB(curMonthDay));
//        int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
//
//        for (int day = 1; day <= maxDay; day++) {
//            row.createCell(day).setCellValue(day + "");
//        }
//
//        ScheduleClassesStaffDto scheduleClassesStaffDto = new ScheduleClassesStaffDto();
//        scheduleClassesStaffDto.setStaffId(reqJson.getString("staffId"));
//        scheduleClassesStaffDto.setStaffNameLike(reqJson.getString("staffNameLike"));
//        scheduleClassesStaffDto.setScheduleId(reqJson.getString("scheduleId"));
//        scheduleClassesStaffDto.setStoreId(reqJson.getString("storeId"));
//
//        getStaffMonthScheduleClasses(sheet, scheduleClassesStaffDto, reqJson);
//
//        return workbook;
//    }
//
//    private void getStaffMonthScheduleClasses(Sheet sheet, ScheduleClassesStaffDto scheduleClassesStaffDto, JSONObject reqJson) {
//        scheduleClassesStaffDto.setPage(1);
//        scheduleClassesStaffDto.setRow(MAX_ROW);
//        long count = scheduleClassesStaffV1InnerServiceSMOImpl.queryScheduleClassesStaffsCount(scheduleClassesStaffDto);
//        int record = (int) Math.ceil((double) count / (double) MAX_ROW);
//
//        List<ScheduleClassesStaffDto> scheduleClassesStaffDtos = null;
//
//        for (int page = 1; page <= record; page++) {
//            scheduleClassesStaffDto.setPage(page);
//            scheduleClassesStaffDto.setRow(MAX_ROW);
//            scheduleClassesStaffDtos = scheduleClassesStaffV1InnerServiceSMOImpl.queryScheduleClassesStaffs(scheduleClassesStaffDto);
//            for (ScheduleClassesStaffDto tmpScheduleClassesStaffDto : scheduleClassesStaffDtos) {
//                computeStaffCurMonthWorkday(tmpScheduleClassesStaffDto, reqJson);
//
//            }
//            appendData(scheduleClassesStaffDtos, sheet, (page - 1) * MAX_ROW);
//        }
//    }
//
//    private void appendData(List<ScheduleClassesStaffDto> scheduleClassesStaffDtos, Sheet sheet, int step) {
//
//        Row row = null;
//        ScheduleClassesStaffDto scheduleClassesStaffDto = null;
//        String cellValue = "";
//        ScheduleClassesDayDto day = null;
//        for (int roomIndex = 0; roomIndex < scheduleClassesStaffDtos.size(); roomIndex++) {
//            row = sheet.createRow(roomIndex + step + 1);
//            scheduleClassesStaffDto = scheduleClassesStaffDtos.get(roomIndex);
//            row.createCell(0).setCellValue(scheduleClassesStaffDto.getStaffName());
//            for (int dayIndex = 1; dayIndex <= scheduleClassesStaffDto.getDays().size(); dayIndex++) {
//                day = scheduleClassesStaffDto.getDays().get(dayIndex-1);
//                if (ScheduleClassesDayDto.WORKDAY_NO.equals(day.getWorkday())) {
//                    cellValue = "休息";
//                } else {
//                    cellValue = day.getWorkdayName()+"\r\n";
//                    for (ScheduleClassesTimeDto time : day.getTimes()) {
//                        cellValue += (time.getStartTime() + "-" + time.getEndTime());
//                    }
//                }
//                row.createCell(dayIndex).setCellValue(cellValue);
//            }
//        }
//    }
//
//    /**
//     * 计算 员工 排班情况
//     *
//     * @param scheduleClassesStaffDto
//     * @param reqJson
//     */
//    private void computeStaffCurMonthWorkday(ScheduleClassesStaffDto scheduleClassesStaffDto, JSONObject reqJson) {
//
//        ScheduleClassesDto scheduleClassesDto = new ScheduleClassesDto();
//        scheduleClassesDto.setScheduleId(scheduleClassesStaffDto.getScheduleId());
//        List<ScheduleClassesDto> scheduleClassesDtos = scheduleClassesV1InnerServiceSMOImpl.queryScheduleClassess(scheduleClassesDto);
//        //这里 如果没有员工排班 那么就认为 员工一直在上班
//        if (scheduleClassesDtos == null || scheduleClassesDtos.size() < 1) {
//            return;
//        }
//
//        ScheduleClassesDayDto scheduleClassesDayDto = new ScheduleClassesDayDto();
//        scheduleClassesDayDto.setScheduleId(scheduleClassesDtos.get(0).getScheduleId());
//        List<ScheduleClassesDayDto> scheduleClassesDayDtos = scheduleClassesDayV1InnerServiceSMOImpl.queryScheduleClassesDays(scheduleClassesDayDto);
//
//        //设置问题 ，这里默认反馈在线
//        if (scheduleClassesDayDtos == null || scheduleClassesDayDtos.size() < 1) {
//            return;
//        }
//
//        String curMonth = reqJson.getString("curDate");
//        String curMonthDay = curMonth + "-01";
//
//        Calendar calendar = Calendar.getInstance();
//        calendar.setTime(DateUtil.getDateFromStringB(curMonthDay));
//        int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
//
//        if (ScheduleClassesDto.SCHEDULE_TYPE_DAY.equals(scheduleClassesDtos.get(0).getScheduleType())) {
//            doDay(scheduleClassesStaffDto, scheduleClassesDtos.get(0), scheduleClassesDayDtos, curMonth, maxDay);
//        } else if (ScheduleClassesDto.SCHEDULE_TYPE_WEEK.equals(scheduleClassesDtos.get(0).getScheduleType())) {
//            doWeek(scheduleClassesStaffDto, scheduleClassesDtos.get(0), scheduleClassesDayDtos, curMonth, maxDay);
//        } else if (ScheduleClassesDto.SCHEDULE_TYPE_MONTH.equals(scheduleClassesDtos.get(0).getScheduleType())) {
//            doMonth(scheduleClassesStaffDto, scheduleClassesDtos.get(0), scheduleClassesDayDtos, curMonth, maxDay);
//        }
//
//
//    }
//
//    private void doDay(ScheduleClassesStaffDto scheduleClassesStaffDto,
//                       ScheduleClassesDto scheduleClassesDto,
//                       List<ScheduleClassesDayDto> scheduleClassesDayDtos,
//                       String curMonth, int maxDay) {
//        List<ScheduleClassesDayDto> days = new ArrayList<>();
//        ScheduleClassesDayDto scDay = null;
//        ScheduleClassesDayDto tmpScheduleClassesDayDto = null;
//        int curDay = 1;
//        for (int day = 1; day <= maxDay; day++) {
//            scDay = new ScheduleClassesDayDto();
//            String today = curMonth + "-" + day;
//
//            int scheduleCycle = Integer.parseInt(scheduleClassesDto.getScheduleCycle());
//
//            int allDay = DateUtil.daysBetween(scheduleClassesDto.getComputeTime(), today) + 1;
//            curDay = allDay % scheduleCycle;
////
////            if (curDay == 0 && day == 1) {
////                curDay = 1;
////            }
////            if (curDay == 0 && day > 1) {
////                curDay = scheduleCycle;
////            }
//            if (curDay == 0) {
//                curDay = scheduleCycle;
//            }
//
//
//            scDay.setDay(day + "");
//            //计算 排班
//            for (ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos) {
//                if ((curDay + "").equals(scheduleClassesDayDto1.getDay())) {
//                    tmpScheduleClassesDayDto = scheduleClassesDayDto1;
//                }
//            }
//            if (tmpScheduleClassesDayDto != null) {
//                scDay.setWorkday(tmpScheduleClassesDayDto.getWorkday());
//                scDay.setTimes(tmpScheduleClassesDayDto.getTimes());
//            }
//            days.add(scDay);
//
//        }
//
//        scheduleClassesStaffDto.setDays(days);
//    }
//
//    private void doWeek(ScheduleClassesStaffDto scheduleClassesStaffDto,
//                        ScheduleClassesDto scheduleClassesDto,
//                        List<ScheduleClassesDayDto> scheduleClassesDayDtos,
//                        String curMonth, int maxDay) {
//        List<ScheduleClassesDayDto> days = new ArrayList<>();
//        ScheduleClassesDayDto scDay = null;
//        ScheduleClassesDayDto tmpScheduleClassesDayDto = null;
//        int curDay = 1;
//        for (int day = 1; day <= maxDay; day++) {
//            scDay = new ScheduleClassesDayDto();
//            Calendar today = Calendar.getInstance();
//            today.setTime(DateUtil.getDateFromStringB(curMonth + "-" + day));
//            int week = today.get(Calendar.WEEK_OF_MONTH);
//            curDay = today.get(Calendar.DAY_OF_WEEK);
//
//            //一周第一天是否为星期天
//            boolean isFirstSunday = (today.getFirstDayOfWeek() == Calendar.SUNDAY);
//            //获取周几
//            //若一周第一天为星期天，则-1
//            if (isFirstSunday) {
//                curDay = curDay - 1;
//                if (curDay == 0) {
//                    curDay = 7;
//                }
//            }
//
//            scDay.setDay(day + "");
//            //计算 排班
//            for (ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos) {
//                if ((curDay + "").equals(scheduleClassesDayDto1.getDay()) && (week + "").equals(scheduleClassesDayDto1.getWeekFlag())) {
//                    tmpScheduleClassesDayDto = scheduleClassesDayDto1;
//                }
//            }
//            if (tmpScheduleClassesDayDto == null) { // 没有设置周
//                for (ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos) {
//                    if ((curDay + "").equals(scheduleClassesDayDto1.getDay())) {
//                        tmpScheduleClassesDayDto = scheduleClassesDayDto1;
//                    }
//                }
//            }
//            if (tmpScheduleClassesDayDto != null) {
//                scDay.setWorkday(tmpScheduleClassesDayDto.getWorkday());
//                scDay.setTimes(tmpScheduleClassesDayDto.getTimes());
//            }
//            days.add(scDay);
//
//        }
//
//        scheduleClassesStaffDto.setDays(days);
//    }
//
//
//    private void doMonth(ScheduleClassesStaffDto scheduleClassesStaffDto,
//                         ScheduleClassesDto scheduleClassesDto,
//                         List<ScheduleClassesDayDto> scheduleClassesDayDtos,
//                         String curMonth, int maxDay) {
//        List<ScheduleClassesDayDto> days = new ArrayList<>();
//        ScheduleClassesDayDto scDay = null;
//        ScheduleClassesDayDto tmpScheduleClassesDayDto = null;
//        int curDay = 1;
//        for (int day = 1; day <= maxDay; day++) {
//            scDay = new ScheduleClassesDayDto();
//            curDay = day;
//            scDay.setDay(day + "");
//            //计算 排班
//            for (ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos) {
//                if ((curDay + "").equals(scheduleClassesDayDto1.getDay())) {
//                    tmpScheduleClassesDayDto = scheduleClassesDayDto1;
//                }
//            }
//            if (tmpScheduleClassesDayDto != null) {
//                scDay.setWorkday(tmpScheduleClassesDayDto.getWorkday());
//                scDay.setTimes(tmpScheduleClassesDayDto.getTimes());
//            }
//            days.add(scDay);
//        }
//
//        scheduleClassesStaffDto.setDays(days);
//    }
//
//
//}
